#include <fcntl.h>   // 包含文件操作相关的头文件
#include <unistd.h>  // 包含系统调用相关的头文件
#include <stdio.h>   // 包含标准输入输出库，用于使用 perror 函数

int main() {
    // 打开源文件，只读方式
    int src_fd = open("source.txt", O_RDONLY);
    if (src_fd == -1) {
        perror("Error opening source file");
        return 1;
    }

    // 打开目标文件，写入方式（如果不存在则创建）
    int dest_fd = open("destination.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (dest_fd == -1) {
        perror("Error opening destination file");
        close(src_fd);  // 关闭源文件
        return 1;
    }

    // 读取源文件数据并写入目标文件
    char buffer[1024];
    ssize_t bytes_read;

    while ((bytes_read = read(src_fd, buffer, sizeof(buffer))) > 0) {
        ssize_t bytes_written = write(dest_fd, buffer, bytes_read);
        if (bytes_written == -1) {
            perror("Error writing to destination file");
            close(src_fd);   // 关闭源文件
            close(dest_fd);  // 关闭目标文件
            return 1;
        }
    }

    // 检查读取过程中是否出错
    if (bytes_read == -1) {
        perror("Error reading from source file");
        close(src_fd);   // 关闭源文件
        close(dest_fd);  // 关闭目标文件
        return 1;
    }

    // 关闭文件
    if (close(src_fd) == -1) {
        perror("Error closing source file");
        return 1;
    }

    if (close(dest_fd) == -1) {
        perror("Error closing destination file");
        return 1;
    }

    printf("File copy successful.\n");

    return 0;
}

